Protocol Buffers
googleが開発したinterface定義言語
.protoが拡張子
Rust, Python, TypeScriptなど、様々な言語の型定義ファイルに変換できる
https://buf.build/
Rust
prost
https://github.com/tokio-rs/prost
cargo projectではprost-buildを使う
https://crates.io/crates/prost-build
事前にprotocをinstallする必要がある
https://protobuf.dev/
$ sudo apt install protobuf-compiler
PROTOCにpathを入れておく
build.rsなどでprost-buildを使う場合は、protobuf-src crateを使ってpathを通せるhttps://docs.rs/prost-build/latest/prost_build/#compiling-protoc-from-source
要Cmake
$ std::env::set_var("PROTOC", protobuf_src::protoc());
TypeScriptへの変換
今までprotobuf-tsが用いられていたが、今はprotobuf-esが推奨されている
新しいprotobuf for Typescriptのprotobuf-esについて調べてみる
$ npm install @bufbuild/protobuf @bufbuild/protoc-gen-es @bufbuild/buf
-Dをいれるとエラーになるので注意
$ npx buf generate <dir>
実行前に、./buf.gen.yamlを作る必要がある
@bufbuild/protobuf
https://github.com/bufbuild/protobuf-es/tree/main/packages/protobuf
protocol bufferのTS側runtime library
Denoで実行する
--allow-scripts
/uki00a/--allow-scripts
$ echo "{\"imports\":{\"@bufbuild/protobuf\":\"npm:@bufbuild/protobuf@2\"},\"nodeModulesDir\":true,\"tasks\":{\"buf\":\"deno cache --allow-scripts=npm:@bufbuild/buf npm:@bufbuild/buf@1 npm:@bufbuild/protoc-gen-es@2 && PATH=\$PATH:./node_modules/.bin deno run --allow-env --allow-read --allow-write --allow-run npm:@bufbuild/buf@1/buf\"}}" > deno.jsonc
./buf.gen.yamlを作る
code:yml
# Learn more: https://buf.build/docs/configuration/v2/buf-gen-yaml
version: v2
inputs:
- directory: ../proto
plugins:
- local: protoc-gen-es
opt:
- target=ts
- import_extension=ts
out: ./gen
import_extension=tsとtarget=tsは必須
$ deno task buf generate
serialize
https://protobuf.dev/programming-guides/encoding/
バイナリに変換してデータを保存する
https://engineering.mercari.com/blog/entry/20210921-ca19c9f371/
@bufbuild/protobufのtoBinaryとfromBinaryでencode/decodeできる
https://zenn.dev/ryo_kawamata/articles/ts-from-protocol-buffers
#protobuf
#2024-08-15 16:09:25
#2024-08-11 15:55:29
#2024-02-08 13:43:37